<?php
/**
 * Created by PhpStorm.
 * User: wudiying
 * Date: 2020/2/18
 * Time: 上午12:45
 */


/**
 * swoole之锁机制
 *
 * $lock = new swoole_lock(SWOOLE_MUTEX);
 * 参数：文件锁、读写锁、信号量、互斥锁、自旋锁。
 * lock();
 * unlock();
 *
 *
 *
 *
 * 1.当pcntl_fork（）创建子进程成功后，在父进程内，返回子进程号，在子进程内返回0，失败则返回-1
 * 2.子进程会复制父进程的代码，数据。那么就说明：子，父进程拥有的代码和数据会一模一样。
 * 3.重点：子进程会复制父进程的状态，那么就有上面的示例代码：在第五行执行了pcntl_fork，那么创建出的子进程，代码也是从第五行开始执行的。又子进程复制了数据，代码。所以，在子进程内同理存在：$one,$two等变量
 *
 */


$lock = new swoole_lock(SWOOLE_MUTEX);
echo "[Master]create lock\n";

$lock->lock();

if (pcntl_fork() > 0)
{
    sleep(1);
    $lock->unlock();
}
else
{
    echo "[Child] Wait Lock\n";
    $lock->lock();
    echo "[Child] Get Lock\n";
    $lock->unlock();
    exit("[Child] exit\n");
}

echo "[Master]release lock\n";
unset($lock);
sleep(1);
echo "[Master]exit\n";